/* 
 * Fonctions javascript propres aux vues des paniers
 * 
 * 
 */


    function beforeLoading() {
        //Evenement déclenchant un redimensionnement de la page                
        jQuery(window).resize(windowResize);
    }

    function afterLoading() {
        //Affiche le Nom de l'opération
        spLibelleOperation.textContent = libelleOperation;
        
        //Afficher le template de la grille de saisie du panier
        res = afficherGrillePanier();
        majMontantPanier();
        
        //affichage des montants des chèques
        for (i=0;i<definitionGrille.montantscheques.length;i++){
            document.getElementById("txtMontantCheque" + (i + 1)).value = definitionGrille.montantscheques[i]['montant'];
        }
        montantChequeOnChange();
        
        
    }

    //redimensionnement des elements
    function windowResize() {
           
    }	
    
    function afficherGrillePanier(){      
        var container = jQuery("#grillePanier");
        container.handsontable({
            readOnly: gridReadOnly,
            data: definitionGrille.donnees,				
            rowHeaders: false,
            colHeaders: false,
            colWidths: definitionGrille.colWidths,
            columns: definitionGrille.columns,
            mergeCells: [{row: 0, col: 0, rowspan: definitionGrille.rowspan, colspan: definitionGrille.colspan}],
            maxRows: definitionGrille.maxRows,
            maxCols: definitionGrille.maxCols+1,
            comments: true,
            cell: definitionGrille.proprietes,
            afterChange: function(changes, source) {
                gridChange(changes, source);
            },
            afterSelection: function(r, c, r2, c2) {
                if (r2 < definitionGrille.rowspan || c2 < definitionGrille.colspan){
                    var grille = jQuery("#grillePanier").handsontable('getInstance');
                    grille.deselectCell();
                };
            }
        });
        
    }
	
    function gridChange(changes, source) {
        if (changes !== null && skipChangeEvent === false) {
            skipChangeEvent = true;
            selectionDistribution (changes);
            skipChangeEvent = false;
            if ((changes[0][1] >= definitionGrille.colspan) && (changes[0][0] >= definitionGrille.rowspan)) {
                majMontantPanier();
            }
        }        
    }
    
    function montantChequeOnChange() {

        //vérification de la cohérence
        montantPanier = Number(parseFloat(document.getElementById("txtTotalPanier").value).toFixed(2));
        montantCheques = Number(calculeSommeCheques().toFixed(2));
        if (montantPanier !== montantCheques) {
            if (document.getElementById('btnGenererPanier') !== null) {
                document.getElementById('btnGenererPanier').disabled = true;
            }
            document.getElementById('divAlerteOK').style.visibility='hidden';
            document.getElementById('divAlerteKO').style.visibility='visible';
            ecart = (montantCheques - montantPanier);
            if (ecart > 0) {
                texteEcart = ecart + ' € en trop';
            } else {
                texteEcart = 'il manque ' + (- 1 * ecart) + ' € ';
            }
            document.getElementById('divAlerteKOEcart').innerHTML = ' (' + texteEcart + ')';
        } else {
            if (document.getElementById('btnGenererPanier') !== null) {
                document.getElementById('btnGenererPanier').disabled = false;
            }
            document.getElementById('divAlerteOK').style.visibility='visible';
            document.getElementById('divAlerteKO').style.visibility='hidden';
        }
    }
	
    function majMontantPanier() {
        //calcul du montant total du panier
        colonneDebut = definitionGrille.colspan;
        lignePrixUnitaire = definitionGrille.ligneprixunitaire;
        ligneQuantiteLot = definitionGrille.lignequantitelot;
        montantTotal = 0;
        for (j=colonneDebut;j<definitionGrille.maxCols;j++){
            quantiteLot = definitionGrille.donnees[ligneQuantiteLot][j];
            prixUnitaire = definitionGrille.donnees[lignePrixUnitaire][j];
            prixUnitaire = prixUnitaire.replace(' ', '');
            prixUnitaire = prixUnitaire.replace('€', '');
            if (isNumeric(prixUnitaire) && isNumeric(quantiteLot)){
                prixUnitaire = parseFloat(prixUnitaire);
                quantiteLot = parseFloat(quantiteLot);
                for (i=definitionGrille.headerLines;i<definitionGrille.maxRows;i++){
                    valeurLue = definitionGrille.donnees[i][j];
                    if (isNumeric(valeurLue)){
                        valeurLue = parseInt(valeurLue);
                        montantTotal = montantTotal + prixUnitaire * quantiteLot * definitionGrille.donnees[i][j];		   
                    }
                }
            }
        }

        //mise à jour du total
        montantFormatte = '';
        if (parseInt(montantTotal) != montantTotal) {
            //nombre décimal
            if (Number((montantTotal).toFixed(2)) == Number((montantTotal).toFixed(1))) {
                montantFormatte = Number(montantTotal.toFixed(2)) + '0'; 
            } else {
                montantFormatte = Number(montantTotal.toFixed(2)); 
            }
        } else {
            //nombre entier
            montantFormatte = Number(montantTotal.toFixed(2)); 
        }
        document.getElementById("txtTotalPanier").value = montantFormatte;
        
        //MAJ du montant des chèques
        document.getElementById("txtMontantCheque1").value = montantFormatte;
        compteur = 2;
        do {
            document.getElementById('txtMontantCheque' + compteur).value = 0;                       
            compteur += 1;
        } while (document.getElementById('txtMontantCheque' + compteur) !== null);
        
    }
	
    function isNumeric(n) {
        return !isNaN(parseFloat(n)) && isFinite(n);
    }
        
    //lors de la selection d'une distribution, deselectionne les autres (fonctionnement bouton radio)
    function selectionDistribution(changes) {
        if (changes !== null) {
            var grille = jQuery("#grillePanier");        
            if (changes.length === 1) {
                if (changes[0][1] === definitionGrille.colonnechoixdistribution) {
                    for (i=definitionGrille.rowspan;i<grille.handsontable('countRows') ;i++) {
                        grille.handsontable ('setDataAtCell', i, definitionGrille.colonnechoixdistribution, false);
                    }
                    grille.handsontable ('setDataAtCell', changes[0][0], definitionGrille.colonnechoixdistribution, true);
                }
            }
        }
    }
    
    function calculeSommeCheques(){
        montantTotal = 0;
        compteur = 1;
        do {
            MontantCheque = document.getElementById('txtMontantCheque' + compteur).value.trim();
            if(MontantCheque !== '') {
                if (isNumeric(MontantCheque) && parseFloat(MontantCheque) >= 0){
                    montantTotal += parseFloat(MontantCheque);
                } else {
                    alert ('Le montant saisi est incorrect !');
                    document.getElementById('txtMontantCheque' + compteur).value = 0;
                }
            }                         
            compteur += 1;
        } while (document.getElementById('txtMontantCheque' + compteur) !== null);
        
        return montantTotal;
    }
    
    function genererPanier() {

        //vérification des paramètres

        /*
         * - Une famille sélectionnée
         * - Un libellé
         * - Une date de fin > date de debut (dans le code)
         * - au moins une date de distribution
         * 
         */
  
       
        //verification que la somme des montants des cheques est bien égale au montant total des paniers
        montantPanier = Number(parseFloat(document.getElementById("txtTotalPanier").value).toFixed(2));
        montantCheques = Number(calculeSommeCheques().toFixed(2));
        if (montantPanier !== montantCheques) {
            alert ("Le montant des chèques n'est pas égal au montant du panier.\nModifier la valeur des chèques avant de valider.");
            return;
        }
        
        if (montantPanier == 0){
            alert ("Le panier est vide, impossible de valider");
            return;
        }
        
        //message de confirmation
        var res = confirm("Voulez vous vraiment créer le panier avc ces paramètres ?\n\nToute modification ultérieure devra se faire par un administrateur.");
        if (res === false) {
            return false;
        }      
        
        //récupération des valeurs des paiements
        montants = [];
        montantCheques = 0;
        for (var i=1;i<definitionGrille.datescheques.length + 1;i++){
            valeurLue = document.getElementById('txtMontantCheque' + i).value.trim();
            if (valeurLue !== '' && valeurLue !== '0') {
                if (isNumeric(valeurLue)) {
                    montantCheques += parseFloat(valeurLue);
                    montants.push(parseFloat(valeurLue));
                }
            }
            
        }
        
        //envoie les données au serveur via AJAX
        paramsURI = 'customaction=remplirpanier&libelleoperation=' + libelleOperation + '&codefamilleproduits=' + codeFamilleProduits + '&codeoperation=' + codeOperation + '&donnees=' + JSON.stringify(definitionGrille.donnees) + '&montantscheques=' + JSON.stringify(montants) + '&montantpanier=' + montantPanier;
        var loader = dhtmlxAjax.postSync(ajaxCallbackFunction,encodeURI(paramsURI));

        //Retour serveur
        if(loader.xmlDoc.responseText !== '') {
            alert (loader.xmlDoc.responseText);
        }

    }

